package com.hunttown.mes.common.utils;

import org.apache.commons.codec.digest.DigestUtils;

import java.security.MessageDigest;

/**
 * 非对称加密
 * created by hunttown on 2017/7/27
 */
public class GetMD5Hash {

    /**
     * MD5 加密
     *
     * @param inStr 要加密的字符串
     * @param len   16位或32位
     * @param join  是否连接原字符串
     * @return 返回加密结果
     */
    public static String md5Encode(String inStr, int len, boolean join) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");   //SHA 或者 MD5

            char[] charArray = inStr.toCharArray();
            byte[] byteArray = new byte[charArray.length];

            for (int i = 0; i < charArray.length; i++)
                byteArray[i] = (byte) charArray[i];

            byte[] md5Bytes = md5.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();

            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }

            String returnValue = hexValue.toString();
            if (len > 0)
                returnValue = returnValue.substring(0, len);

            if (join)
                return returnValue + inStr;
            else
                return returnValue;

        } catch (Exception e) {
            return null;
        }
    }

    /**
     * MD5 加密（使用系统自动函数）
     *
     * @param inStr 要加密的字符串
     * @param len   16位或32位
     * @param join  是否连接原字符串
     * @return 返回加密结果
     */
    public static String md5EncodeMaster(String inStr, int len, boolean join) {
        try {

            if (StringUtils.isBlank(inStr) || len <= 0) {
                return null;
            }

            String md5 = DigestUtils.md5Hex(inStr);

            if (len == 16) {
                md5 = md5.substring(8, 24);
            } else {
                md5 = md5.substring(0, len);
            }

            if (join) {
                return md5 + inStr;
            } else {
                return md5;
            }

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
